package com.gg.user.gguser.service.impl;


import com.alibaba.fastjson.JSONObject;
import com.gg.header.getHeaderUser;
import com.gg.user.gguser.dao.*;
import com.gg.user.gguser.dataobject.GgUserDataobject;
import com.gg.user.gguser.service.GgUserRoleService;
import com.gg.vo.return_format;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.util.List;

@Service
public class GgUserRoleServiceImpl implements GgUserRoleService {


    @Autowired
    private GgJurisdictionDaoMapper ggJurisdictionDaoMapper;

    @Autowired
    private GgUserDao ggUserDao;

    @Autowired
    private GgUserDaoMapper ggUserDaoMapper;

    @Autowired
    private GgBindingDaoMapper ggBindingDaoMapper;

    @Autowired
    private GgUserRoleMapper ggUserRoleMapper;

    @Override
    public Object updateUserRole(HttpServletResponse response, HttpServletRequest request, String upUserId, Integer grade) throws Exception {
        try {
            // 查询出谁要修改的用户用户现在的等级
            // 获取增加用户的是谁
            String cookiceUser = getHeaderUser.getHader(response,request,"gg");
            String ggIdUser= JSONObject.parseObject(cookiceUser).getString("ggId"); // 获取到用户id
            Integer ggGrade= JSONObject.parseObject(cookiceUser).getInteger("ggGrade"); // 获取到用户等级
            // 查询出要改的用户的信息
            GgUserDataobject upGgUserDataobject = ggUserDao.getUser(upUserId);
            // 判断要修改的等级，第一不能高于现在所在等级 外部用户不能修改游客 内部不能修改外部公司内部的人
            if(ggGrade < grade && grade < 6){

                if(ggGrade == 1){//是超管修改 谁都可以改
                    try {
                        ggUserDaoMapper.updateUserRole(grade, upUserId);
                        ggUserRoleMapper.installRolr(upUserId,grade,ggIdUser);
                        return return_format.return_format_All(0,"","修改成功！");
                    }catch (Exception e){
                        return return_format.return_format_error(100002,"修改失败！");
                    }
                }else if(ggGrade == 2 && upGgUserDataobject.getGgGrade()==5 && grade == 3){ // 内部的只能改游客为公司 或者改公司为游客  游客修改为公司
                    try {
                        ggUserDaoMapper.updateUserRole(3, upUserId);
                        ggUserRoleMapper.installRolr(upUserId,3,ggIdUser);
                        return return_format.return_format_All(0,"","游客修改为公司成功！");
                    }catch (Exception e){
                        return return_format.return_format_error(100002,"修改失败！");
                    }
                }else if (ggGrade == 2 && upGgUserDataobject.getGgGrade() == 3 && grade == 5){ // 内部的只能改游客为公司 或者改公司为游客  公司改为游客
                    try {
                        ggUserDaoMapper.updateUserRole(5, upUserId);
                        ggUserRoleMapper.installRolr(upUserId,5,ggIdUser);
                        return return_format.return_format_All(0,"","修公司改为游客成功！");
                    }catch (Exception e){
                        return return_format.return_format_error(100002,"修改失败！");
                    }
                }else if (ggGrade == 3 && grade == 5){ // 外部用户公司改自己员工为游客
                    try {
                        ggUserDaoMapper.updateUserRole(5, upUserId);
                        ggUserRoleMapper.installRolr(upUserId,5,ggIdUser);
                        return return_format.return_format_All(0,"","修员工改为游客成功！");
                    }catch (Exception e){
                        return return_format.return_format_error(100002,"修改失败！");
                    }
                }else {
                    return return_format.return_format_error(100002,"您的等级不够，不能随便改！");
                }

            }else {
                return return_format.return_format_error(100002,"您的等级不够，不能随便改！");
            }
        }catch (Exception e){
            return return_format.return_format_error(100002,"服务器报错！");
        }
    }

    /**
     * 用户之间的绑定 外部公司和员工，内部的客服和客户  直接通过邀请码或者内部新建的不走这里
     *
     * upUserId 公司账号的id也就是公司超级管理员
     * npUserId 需要绑定的用户
     */
    @Override
    public Object bindingUser(HttpServletResponse response, HttpServletRequest request, String upUserId, String npUserId) throws Exception {
        // 获取增加用户的是谁
        String cookiceUser = getHeaderUser.getHader(response,request,"gg");
        // String ggIdUser= JSONObject.parseObject(cookiceUser).getString("ggId"); // 获取到用户id
        Integer ggGradeUser= JSONObject.parseObject(cookiceUser).getInteger("ggGrade"); // 判断用户等级
        // 查询出要绑定的用户
        GgUserDataobject upGgUserDataobject = ggUserDao.getUser(upUserId);

        // 查询出被绑定用户
        GgUserDataobject npGgUserDataobject = ggUserDao.getUser(npUserId);

        // 判断要修改的人是不是内部人员
        if (ggGradeUser>=2){
            // 看下要绑定的是公司不是
            Integer upGradeUser = upGgUserDataobject.getGgGrade();
            if (upGradeUser!=3){
                return return_format.return_format_error(100002,"请选定公司绑定！");
            }

            //查看是不是没有绑定过的用户
            Integer npGradeUser = npGgUserDataobject.getGgGrade();
            if (npGradeUser!=5){
                return return_format.return_format_error(100002,"该用户已经绑定公司了请换个方式操作！");
            }

            // 都不满足也就是空白用户的话那就绑定
            ggBindingDaoMapper.bindingUser(upUserId,npUserId);

        }else {
            return return_format.return_format_error(100002,"不是内部员工不要瞎改！");
        }



        // 看下等级问题  外部不能添加 内部的上下级


        return null;
    }

    /**
     * 增加 角色
     */
    @Override
    public Object addRole(HttpServletResponse response, HttpServletRequest request, String name,String grade) throws Exception {
        try {

            // 查询一下是否增加过

            // 获取增加用户的是谁
            String cookiceUser = getHeaderUser.getHader(response,request,"gg");
            String ggIdUser= JSONObject.parseObject(cookiceUser).getString("ggId"); // 获取到用户id  判断用户等级
            ggJurisdictionDaoMapper.installRole(name, grade, ggIdUser);
            return return_format.return_format_All(0,"","");
        }catch (Exception e){
            return return_format.return_format_error(100002,"服务器报错！");
        }
    }

    /**
     * 增加 用户 角色
     */
    @Override
    public Object addUserRole(HttpServletResponse response, HttpServletRequest request, String userid,Integer roleid) throws Exception {
        // 查询是否有这个用户、角色 是不是这个人的

        // 获取增加用户的是谁
        try {
            String cookiceUser = getHeaderUser.getHader(response,request,"gg");
            String ggIdUser= JSONObject.parseObject(cookiceUser).getString("ggId"); // 获取到用户id  判断用户等级
            ggJurisdictionDaoMapper.addUserRole(ggIdUser, userid, roleid);
            return return_format.return_format_All(0,"","");
        }catch (Exception e){
            return return_format.return_format_error(100002,"服务器报错！");
        }

    }


    /**
     * 增加角色组
     */
    @Override
    public Object groduUserGropu(HttpServletResponse response, HttpServletRequest request, String name, String grade) throws Exception {
        try {
            // 查询一下是否增加过

            // 获取增加用户的是谁
            String cookiceUser = getHeaderUser.getHader(response,request,"gg");
            String ggIdUser= JSONObject.parseObject(cookiceUser).getString("ggId"); // 获取到用户id  判断用户等级
            ggJurisdictionDaoMapper.installRoleGropu(name, grade, ggIdUser);
            return return_format.return_format_All(0,"","");
        }catch (Exception e){
            return return_format.return_format_error(100002,"服务器报错！");
        }
    }

    /**
     * 增加角色和用户之间关系
     */
    @Override
    public Object groduUserRoleGropu(HttpServletResponse response, HttpServletRequest request, String userid, Integer roleidGroup) throws Exception {
        // 查询一下是否增加过 、权限
        try {
            // 获取增加用户的是谁
            String cookiceUser = getHeaderUser.getHader(response,request,"gg");
            String ggIdUser= JSONObject.parseObject(cookiceUser).getString("ggId"); // 获取到用户id  判断用户等级
            ggJurisdictionDaoMapper.installUserRoleGropu(ggIdUser, userid, roleidGroup);
            return return_format.return_format_All(0,"","");
        }catch (Exception e){
            return return_format.return_format_error(100002,"服务器报错！");
        }
    }

    /**
     * 增加用户权限都有那些权限
     */
    @Override
    public Object addUserRoleAll(HttpServletResponse response, HttpServletRequest request, String userid,String menu, Integer role, Integer type) throws Exception {
        // 解析收到的json
        // JSONObject.parseObject(menu);
        //  增加权限
        // 获取增加用户的是谁
        try {
            String cookiceUser = getHeaderUser.getHader(response,request,"gg");
            String ggIdUser= JSONObject.parseObject(cookiceUser).getString("ggId"); // 获取到用户id  判断用户等级
            if(type==1){ //type等于1的时候是组
                ggJurisdictionDaoMapper.addUserRoleAll(1,type,role,ggIdUser); // 组插入
            }else if(type==2){ // type等于2的时候是用户
                ggJurisdictionDaoMapper.addUserRoleUserAll(1,type,userid,ggIdUser); // 用户插入
            }
            return return_format.return_format_All(0,"","");
        }catch (Exception e){
            return return_format.return_format_error(100002,"服务器报错！");
        }
    }


}
